package main.编程题;

import java.util.Stack;

/**
 * @author tmh
 * @date 2024/8/1 16:20
 * @description
 *
 * [暴力解法]
 * 使用两个栈：
 * 一个入栈，这个栈用来加入元素
 * 一个出栈，这个出栈用来弹出元素或者返回队列的顶元素
 * 至于判断队列为不为空，只需要判断两个栈都为空的话，那么这个队列就是为空的
 */
public class T232用栈来实现队列 {
    Stack<Integer> stackIn;
    Stack<Integer> stackOut;

    public T232用栈来实现队列() {
        stackIn = new Stack<>();
        stackOut = new Stack<>();
    }

    /**
     * 往队列里面加入元素，就是操作入栈
     *
     * @param x
     */
    public void push(int x) {
        stackIn.push(x);
    }

    /**
     * 就是把入栈里面的元素全部加入出栈里面，然后在弹出出栈里面的元素
     *
     * @return
     */
    public int pop() {
        if (stackOut.isEmpty()) {
            while (!stackIn.isEmpty()) {
                stackOut.push(stackIn.pop());
            }
            return stackOut.pop();
        } else {
            return stackOut.pop();
        }
    }

    public int peek() {
        if (stackOut.isEmpty()) {
            while (!stackIn.isEmpty()) {
                stackOut.push(stackIn.pop());
            }
            return stackOut.peek();
        } else {
            return stackOut.peek();
        }
    }

    public boolean empty() {
        return stackIn.isEmpty() && stackOut.isEmpty();
    }
}
